//天地图
define([
    "dojo/_base/declare", "esri/layers/WebTiledLayer", "esri/request",
    "esri/SpatialReference", "esri/geometry/Extent", "esri/layers/TileInfo"
], function(
    declare, WebTiledLayer, esriRequest, SpatialReference, Extent, TileInfo
) {
    let layer = declare([WebTiledLayer], {
        constructor: function(url, options) {
            this.options = options;
            options.wmtsInfo.customParameters = {
                "tk": "5630174b76350ef58bc5a615a890a46a"
            };
            if (options.type.indexOf('_c') != -1) {
                this.spatialReference = new SpatialReference({
                    wkid: 4490
                });
                this.fullExtent = new Extent(-180.0, -90.0, 180.0, 90.0, new SpatialReference({
                    wkid: 4490
                }));
                this.initialExtent = this.fullExtent;
                this.tileInfo = new TileInfo({
                    "rows": 256,
                    "cols": 256,
                    "compressionQuality": 0,
                    "origin": {
                        "x": -180,
                        "y": 90
                    },
                    "spatialReference": {
                        "wkid": 4490
                    },
                    "lods": [
                        { "level": 1, "resolution": 0.703125, "scale": 295497593.05875003 }, { "level": 2, "resolution": 0.3515625, "scale": 147748796.52937502 }, { "level": 3, "resolution": 0.17578125, "scale": 73874398.264687508 }, { "level": 4, "resolution": 0.087890625, "scale": 36937199.132343754 }, { "level": 5, "resolution": 0.0439453125, "scale": 18468599.566171877 }, { "level": 6, "resolution": 0.02197265625, "scale": 9234299.7830859385 }, { "level": 7, "resolution": 0.010986328125, "scale": 4617149.8915429693 }, { "level": 8, "resolution": 0.0054931640625, "scale": 2308574.9457714846 }, { "level": 9, "resolution": 0.00274658203125, "scale": 1154287.4728857423 }, { "level": 10, "resolution": 0.001373291015625, "scale": 577143.73644287116 }, { "level": 11, "resolution": 0.0006866455078125, "scale": 288571.86822143558 }, { "level": 12, "resolution": 0.00034332275390625, "scale": 144285.93411071779 }, { "level": 13, "resolution": 0.000171661376953125, "scale": 72142.967055358895 }, { "level": 14, "resolution": 8.58306884765625e-005, "scale": 36071.483527679447 }, { "level": 15, "resolution": 4.291534423828125e-005, "scale": 18035.741763839724 }, { "level": 16, "resolution": 2.1457672119140625e-005, "scale": 9017.8708819198619 }, { "level": 17, "resolution": 1.0728836059570313e-005, "scale": 4508.9354409599309 }, { "level": 18, "resolution": 5.3644180297851563e-006, "scale": 2254.4677204799655 }
                        //, { "level": 19, "resolution": 2.68220901489257815e-006, "scale": 1127.23386023998275 }
                        //, { "level": 20, "resolution": 1.341104507446289075e-006, "scale": 563.616930119991375 }
                        //, { "level": 21, "resolution": 6.705522537231445375e-007, "scale": 281.8084650599956875 }
                    ]
                });
            } else {
                this.spatialReference = new SpatialReference({ wkid: 102100 });
                this.fullExtent = new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, this.spatialReference);
                this.initialExtent = this.fullExtent;
                this.tileInfo = new TileInfo({
                    "cols": 256,
                    "rows": 256,
                    "compressionQuality": 0,
                    "origin": { x: -20037508.342787, y: 20037508.342787 },
                    "spatialReference": this.spatialReference,
                    "lods": [
                        { "level": 0, "resolution": 156543.033928, "scale": 591657527.591555 },
                        { "level": 1, "resolution": 78271.5169639999, "scale": 295828763.795777 },
                        { "level": 2, "resolution": 39135.7584820001, "scale": 147914381.897889 },
                        { "level": 3, "resolution": 19567.8792409999, "scale": 73957190.948944 },
                        { "level": 4, "resolution": 9783.93962049996, "scale": 36978595.474472 },
                        { "level": 5, "resolution": 4891.96981024998, "scale": 18489297.737236 },
                        { "level": 6, "resolution": 2445.98490512499, "scale": 9244648.868618 },
                        { "level": 7, "resolution": 1222.99245256249, "scale": 4622324.434309 },
                        { "level": 8, "resolution": 611.49622628138, "scale": 2311162.217155 },
                        { "level": 9, "resolution": 305.748113140558, "scale": 1155581.108577 },
                        { "level": 10, "resolution": 152.874056570411, "scale": 577790.554289 },
                        { "level": 11, "resolution": 76.4370282850732, "scale": 288895.277144 },
                        { "level": 12, "resolution": 38.2185141425366, "scale": 144447.638572 },
                        { "level": 13, "resolution": 19.1092570712683, "scale": 72223.819286 },
                        { "level": 14, "resolution": 9.55462853563415, "scale": 36111.909643 },
                        { "level": 15, "resolution": 4.77731426794937, "scale": 18055.954822 },
                        { "level": 16, "resolution": 2.38865713397468, "scale": 9027.977411 },
                        { "level": 17, "resolution": 1.19432856685505, "scale": 4513.988705 },
                        { "level": 18, "resolution": 0.597164283559817, "scale": 2256.994353 },
                        { "level": 19, "resolution": 0.298582141647617, "scale": 1128.497176 }
                    ]
                });
            }

            esriRequest.setRequestPreCallback((ioArgs) => {
                if (ioArgs.url.indexOf("execute") > -1) {
                    const laostr = ioArgs.content.Web_Map_as_JSON;
                    const laoobj = JSON.parse(laostr);
                    for (var item of laoobj.operationalLayers) {
                        item.wmtsInfo.customParameters = {
                            "tk": "5f304b19f601e0fb351ed2df3f4dc077"
                        };
                    }
                    ioArgs.content.Web_Map_as_JSON = JSON.stringify(laoobj);
                }
                return ioArgs;
            });
            this.onLoad(this);
        },
        getTileUrl: function(level, row, col) {
            let options = this.options;
            if (options && options.type) {
                let type = options.type;
                if (options.type == 'img_c') {
                    return `https://172.20.79.226:10444/arcgis/rest/services/putian_putian_dom_gz/MapServer/tile/${level}/${row}/${col}`
                    // return `https://172.20.79.226:10444/zrdt/arcgis/rest/services/putian_putian_dom_gz/MapServer/tile/${level}/${row}/${col}`
                    // return `https://172.20.79.226:10443/tdt/szgs/arcgis/rest/services/putian_putian_dom_gz/MapServer/tile/${level}/${row}/${col}`
                    // return `https://services.arcgisonline.com/arcgis/rest/services/World_Terrain_Base/MapServer/tile/${level}/${row}/${col}`;
                }else if(options.type == 'cia_c'){
                    // if(level<=18){
                    //     return `https://172.20.79.226:10443/zwwdt/arcgis/rest/services/PTQSYMapLable_2019/MapServer/${level}/${row}/${col}`;
                    // }else{
                        return "";
                    // }

                }else {
                    let arr = type.split('_');
                    var serverIndex = (row + col) % 8;

                    return "http://t" + serverIndex + ".tianditu.gov.cn/" + type + "/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=" +
                        arr[0] + "&STYLE=default&TILEMATRIXSET=" + arr[1] + "&TILEMATRIX=" + level.toString() + "&TILEROW=" + row.toString() +
                        "&TILECOL=" + col.toString() + "&FORMAT=tiles&tk=5630174b76350ef58bc5a615a890a46a";
                }
            } else {
                return ""
            }
        }
    });
    return layer;
});